package com.example.deepschool.service.Course;

import com.example.deepschool.Model.Response.ResponseData;
import org.springframework.web.multipart.MultipartFile;

/**
 * 课程服务接口，提供课程的增、删、改、查等操作。
 */
public interface Course {
	/**
	 * 添加课程。
	 *
	 * @param course 要添加的课程对象。
	 * @param uuid   用户UUID，用于权限验证和记录操作人。
	 */
	void addCourse (com.example.deepschool.Model.Course course, String uuid);
	
	/**
	 * 更新课程信息。
	 *
	 * @param course 要更新的课程对象。
	 * @param UUID   用户UUID，用于权限验证和记录操作人。
	 * @return 更新后的课程对象。
	 */
	com.example.deepschool.Model.Course update (com.example.deepschool.Model.Course course, String UUID);
	
	/**
	 * 上传课程封面图片，并关联到课程。
	 *
	 * @param file       封面图片文件。
	 * @param fileSHA256 图片文件的SHA256校验码。
	 * @param courseId   课程ID。
	 * @param UUID       用户UUID，用于权限验证和记录操作人。
	 * @return 更新后的课程对象。
	 */
	com.example.deepschool.Model.Course putCoverImage (MultipartFile file, String fileSHA256, String courseId, String UUID);
	
	/**
	 * 获取课程封面图片的URL。
	 *
	 * @param CourseImage 课程封面图片的文件名。
	 * @return 封面图片的URL。
	 */
	ResponseData getCourseImage (String CourseImage, String range);
	
	/**
	 * 根据页码和每页数量分页获取课程列表。
	 *
	 * @param Page  当前页码。
	 * @param limit 每页数量。
	 * @return 分页后的课程数组。
	 */
	com.example.deepschool.Model.Course[] getCourseByPagination (Integer Page, Integer limit);
	
	/**
	 * 根据课程名称搜索课程。
	 *
	 * @param name 课程名称。
	 * @return 符合条件的课程数组。
	 */
	com.example.deepschool.Model.Course[] getCourseByName (String name);
	
	/**
	 * 根据用户UUID获取该用户创建的课程列表。
	 *
	 * @param UUID 用户UUID。
	 * @return 用户创建的课程数组。
	 */
	com.example.deepschool.Model.Course[] getCourseByUserId (String UUID);
	
	/**
	 * 根据课程ID获取课程详情。
	 *
	 * @param courseId 课程ID。
	 * @return 课程对象。
	 */
	com.example.deepschool.Model.Course getCourse (Long courseId);
}

